<script>
    // var：    声明变量、可以重复声明、没有预解析可以先赋值后声明、没有块级作用域、 
    // let :    声明变量、不可以重复声明、没有预解析先声明后赋值、有块级作用域、
    // const:   声明常量、不可以重复定义(不能覆盖量值)、声明必须有初始值、没有预解析、有块级作用域、

    let a = 1;  
    console.log(a);

    const PI = 3.14;
    // PI = 3.14      //报错

    const user = {name:'詹姆斯'};
    user.name = '库里';
    // user = {name:'周先生'};     //报错
    console.log(user);


    // var声明的变量存在变量提升（将变量提升到当前作用域的顶部），即变量在声明之前调用，值为默认undefined。
    // let不存在变量提升，即声明的变量一定要在声明后使用，否则报错。

    // var b;
    console.log(b);   //输出默认undefined
    var b = 10;

    console.log(c);   //报错
    let c = 10;

</script>